package com.saxion.model;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.Table;

@Entity
@Table(name = "bestellingen")
public class Bestelling {
	/**
	 * 
	 */
	@Id
	@GeneratedValue
	@Column(name = "bestel_id")
	private int bestelnummer;
	
	
	@ElementCollection(fetch=FetchType.EAGER)
    @MapKeyColumn(name="product_id") 
    @Column(name="aantal")
	@CollectionTable(name="bestelling_product", joinColumns=@JoinColumn(name="bestel_id"))	  	 
	private Map<Product, Integer> producten = new HashMap<Product, Integer>();
	
	@Column
	private double totaalbedrag;
	
	@Column
	private boolean bevestigd;
	
	@Column
	private String klantNaam;
	
	public Bestelling(String klantNaam, int bestelnummer)
	{
		this.klantNaam = klantNaam;
		this.bestelnummer = bestelnummer;
		totaalbedrag = 0;
		
		producten = new HashMap<Product, Integer>();
	}
	
	public Bestelling(){
		producten = new HashMap<Product, Integer>();
	}
	
	
	public Bestelling(String naam) {
		this.klantNaam = naam;
	}


	public int getBestelnummer() {
		return bestelnummer;
	}
		
	public Map<Product, Integer> getProducten() {
		return producten;
	}
		
	public double getTotaalbedrag() {
		return totaalbedrag;
	}
	
	public boolean isBevestigd() {
		return bevestigd;
	}
	
	public void setBevestigd(boolean bevestigd) {
		this.bevestigd = bevestigd;
	}

	public String getKlantNaam() {
		return klantNaam;
	}
	
	//TODO testen
	public void addProduct(Product productId, int aantal) {
		producten.put(productId, aantal);		
		totaalbedrag += productId.getPrijs()*aantal;
	}
	
	public String toString(){
		String s = "bestel_id: " + bestelnummer + "\n";
		s += "Producten: \n";
		for (int i = 0;i < producten.size(); i++){
			s+= "\t" + producten.keySet().toArray()[i].toString() + "aantal " + producten.values().toArray()[i] + "\n";
		}
		s += "totaalbedrag: " + totaalbedrag;
		
		return s;
	}
	
	public double getTotaalPrijs(){
		return totaalbedrag;
	}
}
